package _04_queue;


/**
 * @author: mornd
 * @dateTime: 2023/6/4 - 20:55
 * 队列定义
 */

public interface Queue<E> extends Iterable<E> {

    /**
     * 向队列尾插入值
     * @param e 插入的元素
     * @return 是否插入成功
     */
    boolean offer(E e);

    /**
     * 从队列头获取值，并移除
     * @return 如果队列为空则返回 null，否则返回头部元素
     */
    E poll();

    /**
     * 从队列头获取值，不移除
     * @return 如果队列为空则返回 null，否则返回头部元素
     */
    E peek();

    /**
     * 队列是否为空
     * @return
     */
    boolean isEmpty();

    /**
     * 清空队列
     */
    void clear();

    /**
     * 返回队列存储元素个数
     * @return
     */
    int size();

    /**
     * 检查队列是否已满
     * @return
     */
    boolean isFull();
}
